package com.app.sgd.business.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import javax.sql.DataSource;

import org.apache.log4j.Logger;
import org.apache.struts.util.LabelValueBean;

import com.app.sgd.model.bean.ClasificacionDocumentos;
import com.app.sgd.model.bean.Departamento;
import com.app.sgd.model.bean.Distrito;
import com.app.sgd.model.bean.Empleado;
import com.app.sgd.model.bean.Pais;
import com.app.sgd.model.bean.Provincia;
import com.app.sgd.model.bean.Usuario;
import com.app.sgd.plugin.JNDIConnector;
import com.app.sgd.util.Constants;

public class SQLObjetosSesionDAO {

	private static Logger logger = Logger.getLogger(SQLDocumentoDAO.class);
	
	DataSource ds = null;
	JNDIConnector cn = new JNDIConnector();
	
	public ArrayList getTipoMovimiento(int val) throws Exception {
		ArrayList <LabelValueBean>lstAcciones = new ArrayList <LabelValueBean>();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_TIPO_MOVIMIENTO);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            if(val==1)
            	lstAcciones.add(new LabelValueBean(Constants.VALOR_DEFAULT_TODOS,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstAcciones.add(new LabelValueBean(rs.getString("DESC_TMOV_TTM"),rs.getString("CODI_TMOV_TTM")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getTipoMovimiento: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstAcciones;
	}
	
	public ArrayList getTipoMovimientoRecepcion(int val) throws Exception {
		ArrayList <LabelValueBean>lstAcciones = new ArrayList <LabelValueBean>();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_TIPO_MOVIMIENTO_RECEPCION);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            if(val==1)
            	lstAcciones.add(new LabelValueBean(Constants.VALOR_DEFAULT_TODOS,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstAcciones.add(new LabelValueBean(rs.getString("DESC_TMOV_TTM"),rs.getString("CODI_TMOV_TTM")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getTipoMovimiento: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstAcciones;
	}

	public ArrayList getPrioridad() throws Exception {
		ArrayList lstPrioridad = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_PRIORIDAD);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstPrioridad.add(new LabelValueBean(rs.getString("DESC_PRIO_TP"),rs.getString("CODI_PRIO_TP")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getPrioridad: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstPrioridad;
	}
	
	public ArrayList getFormaEnvio() throws Exception {
		ArrayList lstFormaEnvio = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_FORMA_ENVIO);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstFormaEnvio.add(new LabelValueBean(rs.getString("DESC_FENV_TFE"),rs.getString("CODI_FENV_TFE")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getFormaEnvio: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstFormaEnvio;
	}
	
	public ArrayList getEstadoDocumento() throws Exception {
		ArrayList lstEstadoDocumento = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ESTADO_DOCUMENTO);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstEstadoDocumento.add(new LabelValueBean("TODO",Constants.ESTADO_TODOS));
            while(rs.next()){
            	lstEstadoDocumento.add(new LabelValueBean(rs.getString("DESC_EDOC_TES"),rs.getString("CODI_EDOC_TED")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEstadoDocumento: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstEstadoDocumento;
	}
	
	public ArrayList getEstadoSeguimiento() throws Exception {
		ArrayList lstEstadoSeguimiento = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ESTADO_SEGUIMIENTO);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstEstadoSeguimiento.add(new LabelValueBean("TODO",Constants.ESTADO_TODOS));
            while(rs.next()){
            	lstEstadoSeguimiento.add(new LabelValueBean(rs.getString("DESC_EDOC_TES"),rs.getString("CODI_EDOC_TED")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEstadoSeguimiento: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstEstadoSeguimiento;
	}
	
	public ArrayList getEstadoAccion() throws Exception {
		ArrayList lstEstadoAccion = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ESTADO_ACCION);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstEstadoAccion.add(new LabelValueBean(rs.getString("DESC_EDOC_TES"),rs.getString("CODI_EDOC_TED")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEstadoAccion: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstEstadoAccion;
	}
	
	public ArrayList getEstadoAtencionManual() throws Exception {
		ArrayList lstEstadoAtencion = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ESTADO_ATENCION_MANUAL);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstEstadoAtencion.add(new LabelValueBean(rs.getString("DESC_EDOC_TES"),rs.getString("CODI_EDOC_TED")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEstadoAtencionManual: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstEstadoAtencion;
	}
	
	public ArrayList getTipoDocumento() throws Exception {
		ArrayList lstTipoDocumento = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_TIPO_DOCUMENTO);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstTipoDocumento.add(new LabelValueBean(Constants.VALOR_DEFAULT_TODOS,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstTipoDocumento.add(new LabelValueBean(rs.getString("DESC_TDOC_TTD"),rs.getString("CODI_TDOC_TTD")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getTipoDocumento: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstTipoDocumento;
	}
	
	public ArrayList getTipoDoc_Entrada(int val) throws Exception {
		ArrayList lstTipoDoc_Entrada = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_TIPO_DOCUMENTO_POR_MOVIMIENTO);
            call.setString(2, Constants.TIPO_MOVIMIENTO_ENTRADA);
            rs = call.executeQuery();
            
            if(val==1)
            	lstTipoDoc_Entrada.add(new LabelValueBean(Constants.VALOR_DEFAULT_TODOS,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstTipoDoc_Entrada.add(new LabelValueBean(rs.getString("DESC_TDOC_TTD"),rs.getString("CODI_TDOC_TTD")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getTipoDoc_Entrada: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstTipoDoc_Entrada;
	}
	
	public ArrayList getTipoDoc_Salida(int val) throws Exception {
		ArrayList lstTipoDoc_Salida = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_TIPO_DOCUMENTO_POR_MOVIMIENTO);
            call.setString(2, Constants.TIPO_MOVIMIENTO_SALIDA);
            rs = call.executeQuery();
            
            if(val==1)
            	lstTipoDoc_Salida.add(new LabelValueBean(Constants.VALOR_DEFAULT_TODOS,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstTipoDoc_Salida.add(new LabelValueBean(rs.getString("DESC_TDOC_TTD"),rs.getString("CODI_TDOC_TTD")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getTipoDoc_Salida: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstTipoDoc_Salida;
	}
	
	public ArrayList getTipoDoc_Interno(int val) throws Exception {
		ArrayList lstTipoDoc_Interno = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_TIPO_DOCUMENTO_POR_MOVIMIENTO);
            call.setString(2, Constants.TIPO_MOVIMIENTO_INTERNO);
            rs = call.executeQuery();
            
            if(val==1)
            	lstTipoDoc_Interno.add(new LabelValueBean(Constants.VALOR_DEFAULT_TODOS,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstTipoDoc_Interno.add(new LabelValueBean(rs.getString("DESC_TDOC_TTD"),rs.getString("CODI_TDOC_TTD")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getTipoDoc_Interno: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstTipoDoc_Interno;
	}
	
	public ArrayList getPlazo() throws Exception {
		ArrayList lstPlazo = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_PLAZO);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstPlazo.add(new LabelValueBean(rs.getString("DESC_PLZ_TPLZ"),rs.getString("CODI_PLZ_TPLZ")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getPlazo: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstPlazo;
	}
	
	public ArrayList getOficina() throws Exception {
		ArrayList lstOficina = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_AREA);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstOficina.add(new LabelValueBean(Constants.VALOR_DEFAULT_TODOS,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstOficina.add(new LabelValueBean(rs.getString("NOMB_ARE"),rs.getString("CODI_ARE")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getOficina: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstOficina;
	}
	
	public ArrayList getOficina(Usuario usuario,String tipoBusqueda,int val) throws Exception {
		ArrayList lstOficina = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_AREA);
            
	    	if(usuario.isPrivilegioPersonal() || usuario.isPrivilegioJefeUnidadOrganica() || tipoBusqueda.equals(Constants.BUSQUEDA_PERSONAL))
	    		call.setString(2, usuario.getEncargaturaPerfil().getCodArea());
	    	else
	            call.setString(2, Constants.VALOR_DEFAULT_CERO);

	    	rs = call.executeQuery();
	    	
            if(val==1)
            	lstOficina.add(new LabelValueBean(Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstOficina.add(new LabelValueBean(rs.getString("NOMB_ARE"),rs.getString("CODI_ARE")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getOficina: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstOficina;
	}

	public ArrayList getEmpleadoAreaOrigenUsuario(Usuario usuarioLogin) throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ENCARGATURAS_ORIGEN_POR_AREA);
            call.setString(2, usuarioLogin.getEncargaturaPerfil().getCodArea());
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstObjetos.add(new Empleado(rs.getString("CODI_EMP"),rs.getString("NOMB_LARGO_EMP"),rs.getString("NOMBRE"),rs.getString("CODI_ARE"),rs.getString("CARG_EMP"),rs.getString("CODI_USU"),rs.getString("SIG_ARE"),rs.getString("CARG_USU")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEmpleadoAreaOrigenUsuario: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getEmpleadoAreaConsultas(String codArea) throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ENCARGATURAS_ORIGEN_POR_AREA);
            call.setString(2, codArea);
            rs = call.executeQuery();
            
            lstObjetos.add(new Empleado(Constants.VALOR_DEFAULT_CERO,Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_VACIO,Constants.VALOR_DEFAULT_CERO,Constants.VALOR_DEFAULT_VACIO,Constants.VALOR_DEFAULT_CERO,Constants.VALOR_DEFAULT_VACIO,Constants.VALOR_DEFAULT_VACIO));
            while(rs.next()){
            	lstObjetos.add(new Empleado(rs.getString("CODI_EMP"),rs.getString("NOMB_LARGO_EMP"),rs.getString("NOMBRE"),rs.getString("CODI_ARE"),rs.getString("CARG_EMP"),rs.getString("CODI_USU"),rs.getString("SIG_ARE"),rs.getString("CARG_USU")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEmpleadoAreacConsultas: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}

	public ArrayList getEmpleadoAreaOrigenUsuarioProy(Usuario usuarioLogin) throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ENCARGATURAS_JEFES_ORIGEN);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstObjetos.add(new Empleado(rs.getString("CODI_EMP"),rs.getString("NOMB_LARGO_EMP"),rs.getString("NOMBRE"),rs.getString("CODI_ARE"),rs.getString("CARG_EMP"),rs.getString("CODI_USU"),rs.getString("SIG_ARE"),rs.getString("CARG_USU")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEmpleadoAreaOrigenUsuarioProy: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getEmpleadoAreaDestinoUsuario() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ENCARGATURAS_DESTINO);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstObjetos.add(new Empleado(rs.getString("CODI_INDICE"),
            			rs.getString("NOMB_LARGO_EMP_CARGO").length()>90?rs.getString("NOMB_LARGO_EMP_CARGO").substring(0, 87).concat("..."):rs.getString("NOMB_LARGO_EMP_CARGO") ,
            			rs.getString("CODI_ARE"), rs.getString("CODI_EMP"),
            			rs.getString("CODI_USU"),rs.getString("NOMB_LARGO_EMP"), rs.getString("SIG_ARE"), 
            			rs.getString("DESC_CARG_USU") ,
            			rs.getString("NOMB_ARE"),rs.getString("GRAD_EMP"),rs.getString("INI_EMP"),rs.getString("EMAIL_EMP"),
            			rs.getString("LOGIN_EMP"),rs.getString("FLG_PROY_USU")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEmpleadoAreaDestinoUsuario: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getEmpleadoAreaDestinoUsuario(String codGrupo) throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ENCARGATURAS_DESTINO_POR_GRUPO);
            call.setString(2, codGrupo);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstObjetos.add(new Empleado(rs.getString("CODI_INDICE"),rs.getString("NOMB_LARGO_EMP_CARGO"),rs.getString("CODI_ARE"),rs.getString("CODI_EMP"),rs.getString("CODI_USU"),rs.getString("NOMB_LARGO_EMP"),rs.getString("SIG_ARE"),rs.getString("DESC_CARG_USU"),rs.getString("NOMB_ARE"),rs.getString("GRAD_EMP"),rs.getString("INI_EMP"),rs.getString("EMAIL_EMP"),rs.getString("LOGIN_EMP"),rs.getString("FLG_PROY_USU")));
//            	lstObjetos.add(new Empleado(rs.getString("CODI_EMP"),rs.getString("NOMB_LARGO_EMP"),rs.getString("NOMBRE"),rs.getString("CODI_ARE"),rs.getString("CARG_EMP"),rs.getString("CODI_USU"),rs.getString("SIG_ARE"),rs.getString("CARG_USU")));
//            	lstObjetos.add(new Empleado(rs.getString("CODI_EMP"),rs.getString("NOMB_LARGO_EMP_CARGO"),rs.getString("NOMBRE"),rs.getString("CODI_ARE"),rs.getString("DESC_CARG_USU"),rs.getString("CODI_USU"),rs.getString("SIG_ARE"),rs.getString("DESC_CARG_USU")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEmpleadoAreaDestinoUsuario: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}

	public ArrayList getEstadoRegistro() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ESTADOREG);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_TSTA"),rs.getString("CODI_TSTA")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEstadoRegistro: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getAcciones() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ACCIONES);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_ACC_TACC"),rs.getString("CODI_ACC_TACC")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getAcciones: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getAccionesDesc() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ACCIONES_DESC);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_ACC_TACC"),rs.getString("CODI_ACC_TACC")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getAccionesDesc: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getTipoCliente() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_TIPO_CLIENTE);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstObjetos.add(new LabelValueBean(Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_CERO)); 
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_TIPCL_TTC"),rs.getString("CODI_TIPCL_TTC")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getTipoCliente: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}

	public ArrayList getTipoModalidadEnvio() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_TIPO_MOD_ENV);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstObjetos.add(new LabelValueBean(Constants.VALOR_DEFAULT_TODOS,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_MOD_TTME"),rs.getString("CODI_MOD_TTME")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getTipoModalidadEnvio: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getAmbito() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_AMBITO);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstObjetos.add(new LabelValueBean(Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_AMB"),rs.getString("CODI_AMB")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getAmbito: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}

	public ArrayList getPais() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_PAIS);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstObjetos.add(new Pais(Constants.VALOR_DEFAULT_CERO,Constants.VALOR_DEFAULT_SELECCIONE));
            while(rs.next()){
            	lstObjetos.add(new Pais(rs.getString("CODI_PAIS"),rs.getString("DESC_PAIS")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getPais: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getDepartamento(String codPais) throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_DEPARTAMENTO);
            call.setString(2, codPais);
            rs = call.executeQuery();
            
            lstObjetos.add(new Departamento(Constants.VALOR_DEFAULT_CERO,Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstObjetos.add(new Departamento(rs.getString("CODI_DEP"),rs.getString("DESC_DEP"),rs.getString("CODI_PAIS")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getDepartamento: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getProvincia(String codDpto) throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_PROVINCIA);
            call.setString(2, codDpto);
            rs = call.executeQuery();
            
            lstObjetos.add(new Provincia(Constants.VALOR_DEFAULT_CERO,Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_CERO,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstObjetos.add(new Provincia(rs.getString("CODI_UBIG_PROV"),rs.getString("DESC_PROV"),rs.getString("CODI_DEP"),rs.getString("CODI_PROV")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getProvincia: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getDistrito(String codProv) throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_DISTRITO);
            call.setString(2, codProv);
            rs = call.executeQuery();
            
            lstObjetos.add(new Distrito(Constants.VALOR_DEFAULT_CERO,Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_CERO,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstObjetos.add(new Distrito(rs.getString("CODI_UBIG_DIST"),rs.getString("DESC_DIST"),rs.getString("CODI_UBIG_PROV"),rs.getString("CODI_DIST")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getDistrito: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getRubro() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_TIPO_CATEGORIA);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstObjetos.add(new LabelValueBean(Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_TIPO"),rs.getString("CODI_TIPO")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getRubro: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getTipoPersona() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_TIPO_PERSONA);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstObjetos.add(new LabelValueBean(Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_PER"),rs.getString("CODI_PER")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getTipoPersona: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}
	
	public ArrayList getCourier() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_COURIER);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstObjetos.add(new LabelValueBean(Constants.VALOR_DEFAULT_TODOS,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_COUR_TCR"),rs.getString("CODI_COUR_TCR")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getCourier: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}

	public ArrayList getEPS() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_EPS);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstObjetos.add(new LabelValueBean(Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_EPS"),rs.getString("CODI_EPS")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEPS: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}

	public ArrayList getGrupo() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_GRUPO);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("vDESC_GRUPO"),rs.getString("nCODI_GRUPO")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getGrupo: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}

	public ArrayList getDocIdentidad() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_DOC_IDENTIDAD);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            lstObjetos.add(new LabelValueBean(Constants.VALOR_DEFAULT_SELECCIONE,Constants.VALOR_DEFAULT_CERO));
            while(rs.next()){
            	lstObjetos.add(new LabelValueBean(rs.getString("DESC_DOC_IDEN"),rs.getString("CODI_DOC_IDEN")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getDocIdentidad: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}

	public ArrayList getClasificacionDocumentos() throws Exception {
		ArrayList lstObjetos = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_CLASIFICACION_DOCU);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();
            
            while(rs.next()){
            	lstObjetos.add(new ClasificacionDocumentos(rs.getString("fCODI_CLASIF_CLA"),rs.getString("vDESC_CLASIF_CLA"),rs.getString("cEST_CLASIF_CLA"),rs.getString("nORD_CLASIF_CLA"),rs.getString("fCODI_PLZ_TPLZ"),rs.getString("nDIAS_PLAZO_CLA")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getClasificacionDocumentos: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstObjetos;
	}

	public ArrayList getEstadoExpediente() throws Exception {
		ArrayList lstEstadoDocumento = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
	    try{
	    	conn = cn.connect().getConnection();
	    	String vSQL = "{call std_sp_get_cbo_values(?,?)}";
	    	call = conn.prepareCall(vSQL);
            call.setInt(1, Constants.OBJ_ESTADO_EXPEDIENTE);
            call.setString(2, Constants.VALOR_DEFAULT_CERO);
            rs = call.executeQuery();

            while(rs.next()){
            	lstEstadoDocumento.add(new LabelValueBean(rs.getString("DESC_EDOC_TES"),rs.getString("CODI_EDOC_TED")));
            }
        }
        catch(Exception e) {
        	logger.error("[STD]: Error en getEstadoDocumento: " + e.getMessage());
            e.printStackTrace();
        }
        finally{   
        	cn.destroy(conn,null,rs,call,pre);
	    }
        return lstEstadoDocumento;
	}
}
